package IO流.IO流操作.节点流.字节数组流;

import java.io.*;

/**
 * 字节数组输入流。
 * 1.创建源（字节数组，不要太大）
 * 2.选择流
 * 3.操作文件
 * 4.释放资源（可以不用处理）
 */
public class ByteArrayInputStreamtest {
    public static void main(String[] args) {
        //1.创建源
        byte[] src = "talk is cheap,show me code".getBytes();
        //2.选择流
        InputStream inputStream = null;
        try {
            inputStream = new java.io.ByteArrayInputStream(src);
            //3.操作文件
            //每三个字符存一个池（缓冲容器）
            byte[] pool = new byte[5];
            //接收长度（读取内容为空时，返回-1）
            int len = -1;
            //读取内容为空时，返回-1;;read(byte[])返回值为接收的数据的长度
            //inputStream.read(pool)会在流中操作下一个数据。因此赋值给len，用于接下来的转码 String str = new String(pool,0,len);
            while ((len = inputStream.read(pool)) != -1) {
                //字节数组------>>>转换为字符串（解码）
                //此种方法若长度不能刚好被整除，就会“hello IOStream!0m!”往前借差的位数；若字节数大于，则打印空格（）不推荐
                String str1 = new String(pool);
                //“hello IOStream!0“（推荐）
                String str = new String(pool, 0, len);

                System.out.print(str);

            }
            //若没有数据则返回负一
            inputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //若资源没有被用到，则不用关闭（若不判断会造成空指针异常）
                if (null != inputStream) {
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //4.释放资源
    }

}
